package org.dromara.common.translation.core.impl;

import org.dromara.common.core.service.DeptService;
import org.dromara.common.translation.annotation.TranslationType;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.common.translation.core.TranslationInterface;
import lombok.AllArgsConstructor;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：部门翻译实现
 */
@AllArgsConstructor
// 指定翻译类型，将部门ID转换为部门名称
@TranslationType(type = TransConstant.DEPT_ID_TO_NAME)
/**
 * 部门名称翻译实现类，实现翻译接口
 * 本类负责处理和执行具体的部门名称翻译逻辑
 * 使用泛型String来指定翻译对象的类型
 */
public class DeptNameTranslationImpl implements TranslationInterface<String> {

    /**
     * 通用 部门服务
     */
    private final DeptService deptService;

    /**
     * 根据提供的键值进行翻译
     *
     * @param key 可以是String类型或Long类型的部门ID，用于查询部门名称
     * @param other 保留参数，目前未使用
     * @return 根据键值查询到的部门名称，如果查询失败返回null
     */
    @Override
    public String translation(Object key, String other) {
        // 判断键值是否为String类型，尝试转换为部门ID
        if (key instanceof String ids) {
            // 调用部门服务，根据String类型的部门ID查询部门名称
            return deptService.selectDeptNameByIds(ids);
        } else if (key instanceof Long id) {
            // 转换键值为字符串类型，以便进行部门名称查询
            // 这里解释了为什么需要转换为字符串：可能是因为数据库查询需要字符串类型的参数
            return deptService.selectDeptNameByIds(id.toString());
        }
        // 如果键值既不是String类型也不是Long类型，无法查询，返回null
        return null;
    }
}
